package pacs.sgc.fachada;

import java.util.List;

import pacs.sgc.classesbasicas.Cliente;
import pacs.sgc.classesbasicas.Endereco;
import pacs.sgc.exceptions.AcessoAoBancoException;
import pacs.sgc.exceptions.ClienteJaCadastradoException;
import pacs.sgc.exceptions.ClienteNaoEncontradoException;
import pacs.sgc.exceptions.ConexaoComBancoException;
import pacs.sgc.exceptions.EnderecoJaCadastradoException;
import pacs.sgc.exceptions.EnderecoNaoEncontradoException;
import pacs.sgc.exceptions.NenhumClienteCadastradoException;
import pacs.sgc.exceptions.NenhumEnderecoCadastradoException;

public interface IFachada {
	
	//**********************CLIENTES********************************\\
	public void inserirCliente(Cliente novoCliente) throws ClienteJaCadastradoException, ConexaoComBancoException, AcessoAoBancoException;
	public void removerCliente(String cpf) throws ConexaoComBancoException, AcessoAoBancoException, ClienteNaoEncontradoException;
	public void atualizarCliente(Cliente atualizado) throws ConexaoComBancoException, AcessoAoBancoException, ClienteNaoEncontradoException;
	public Cliente localizarCliente(String cpf, String rg) throws ConexaoComBancoException, AcessoAoBancoException, ClienteNaoEncontradoException;
	public List<Cliente> listarClientes() throws ConexaoComBancoException, AcessoAoBancoException, NenhumClienteCadastradoException;
	public int gerarCodigoCliente() throws ConexaoComBancoException, AcessoAoBancoException;
	
	//*******************ENDERECO*****************************\\
	public void inserirEndereco(Endereco novoEndereco) throws AcessoAoBancoException, ConexaoComBancoException, EnderecoJaCadastradoException;
	public void removerEndereco(int codigo) throws ConexaoComBancoException, AcessoAoBancoException, EnderecoNaoEncontradoException;
	public void atualizarEndereco(Endereco atualizado) throws AcessoAoBancoException, ConexaoComBancoException, EnderecoNaoEncontradoException;
	public Endereco localizarEndereco(int codigo) throws ConexaoComBancoException, AcessoAoBancoException;
	public List<Endereco> listarEnderecos() throws AcessoAoBancoException, ConexaoComBancoException, NenhumEnderecoCadastradoException;
	public int gerarCodigoEndereco() throws AcessoAoBancoException, ConexaoComBancoException;
}
